/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.medical.controlador.recepcion;

import com.ec.medical.controlador.ControladorBase;
import com.ec.medical.entidades.Cliente;
import com.ec.medical.entidades.DireccionCliente;
import com.ec.medical.entidades.DivisionGeografica;
import com.ec.medical.exepciones.ClienteException;
import com.ec.medical.managers.recepcion.IngresoClienteDataManager;
import com.ec.medical.servicio.ClienteServicioLocal;
import com.ec.medical.servicio.DivisionGeograficaServicioLocal;
import com.ec.medical.servicio.EstadoCivilServicioLocal;
import com.ec.medical.servicio.FormasDePagoServicioLocal;
import com.ec.medical.servicio.NacionalidadServicioLocal;
import com.ec.medical.servicio.SexoPersonaServicioLocal;
import com.ec.medical.servicio.TipoDocumentoServicioLocal;
import com.ec.medical.util.Utilitarios;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;

/**
 *
 * @author Administrador
 */
@ManagedBean
@RequestScoped
public class IngresoClienteControlador extends ControladorBase {

    private Logger LOG = Logger.getLogger(IngresoClienteControlador.class.getName());
    @ManagedProperty(value = "#{ingresoClienteDataManager}")
    private IngresoClienteDataManager ingresoClienteDataManager;
    @EJB
    private TipoDocumentoServicioLocal tipoDocumentoServicio;
    @EJB
    private SexoPersonaServicioLocal sexoPersonaServicio;
    @EJB
    private FormasDePagoServicioLocal formasDePagoServicio;
    @EJB
    private NacionalidadServicioLocal nacionalidadServicio;
    @EJB
    private EstadoCivilServicioLocal estadoCivilServicio;
    @EJB
    private DivisionGeograficaServicioLocal divisionGeograficaServicio;
    @EJB
    private ClienteServicioLocal clienteServicio;
    private String mensajeError;

    /**
     * Creates a new instance of IngresoClienteControlador
     */
    public IngresoClienteControlador() {
    }

    @Override
    protected void imprimirLogInfo(String mensaje) {
        LOG.info(mensaje);
    }

    @Override
    protected void imprimirLogError(String mensaje) {
        LOG.error(mensaje);
    }

    @Override
    public void iniciarDatos() {
        imprimirLogInfo(" .. iniciarDatos");
    }

    public List<SelectItem> getTipoDocumentos() {
        return generarItemsConValorNulo(tipoDocumentoServicio.obtenerTodos());
    }

    public List<SelectItem> getSexoPersona() {
        return generarItemsConValorNulo(sexoPersonaServicio.obtenerTodos());
    }

    public List<SelectItem> getFormasDePago() {
        return generarItemsConValorNulo(formasDePagoServicio.obtenerTodos());
    }

    public List<SelectItem> getNacionalidad() {
        return generarItemsConValorNulo(nacionalidadServicio.obtenerTodos());
    }

    public List<SelectItem> getEstadoCivil() {
        return generarItemsConValorNulo(estadoCivilServicio.obtenerTodos());
    }

    public List<SelectItem> getDivisionGeograficaNivelUno() {
        return generarItemsConValorNulo(divisionGeograficaServicio.obtenerPorPadre(sesionDataManager.getDivisionGeografica().getCodigoDivisionGeografica()));
    }

    /**
     * selecciona la division geografica de primer nivel
     */
    public void seleccionarDivisionNivelUno() {
        getIngresoClienteDataManager().setDivisionGeograficaNivelDos(null);
        getIngresoClienteDataManager().setDivisionGeograficaNivelTres(null);
    }

    public IngresoClienteDataManager getIngresoClienteDataManager() {
        return ingresoClienteDataManager;
    }

    public void setIngresoClienteDataManager(IngresoClienteDataManager ingresoClienteDataManager) {
        this.ingresoClienteDataManager = ingresoClienteDataManager;
    }

    public List<SelectItem> getDivisionGeograficaNivelDos() {

        if (!Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelUno()) && !Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelUno().getCodigoDivisionGeografica())) {
            return generarItemsConValorNulo(divisionGeograficaServicio.obtenerPorPadre(getIngresoClienteDataManager().getDivisionGeograficaNivelUno().getCodigoDivisionGeografica()));
        }

        return null;
    }

    public List<SelectItem> getDivisionGeograficaNivelTres() {

        if (!Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelDos()) && !Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelDos().getCodigoDivisionGeografica())) {
            return generarItemsConValorNulo(divisionGeograficaServicio.obtenerPorPadre(getIngresoClienteDataManager().getDivisionGeograficaNivelDos().getCodigoDivisionGeografica()));
        }

        return null;
    }

    /**
     * seleccion la division geografica de tercer nivel
     */
    public void seleccionarDivisionNivelTres() {
        if (!Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelTres())) {
            getIngresoClienteDataManager().setDivisionGeograficaNivelTres(divisionGeograficaServicio.obtenerPorCodigo(getIngresoClienteDataManager().getDivisionGeograficaNivelTres()));
        } else {
            getIngresoClienteDataManager().setDivisionGeograficaNivelTres(null);
        }
    }

    /**
     * Crea un nuevo cliente con su respectiva direccion y los datos principales
     * de su mascota
     */
    public void crearCliente() {

        imprimirLogInfo("crearCliente");
        if (validarDatosParaCreacionCliente()) {
            Cliente cliente = getIngresoClienteDataManager().getCliente();
            DivisionGeografica divGeografica = getIngresoClienteDataManager().getDivisionGeograficaNivelTres();
            divGeografica = divisionGeograficaServicio.obtenerPorCodigo(divGeografica);
            getIngresoClienteDataManager().getDireccionCliente().setDivisionGeografica(divGeografica);
            DireccionCliente direccionCliente = getIngresoClienteDataManager().getDireccionCliente();

            try {
                clienteServicio.ingresarNuevoCliente(cliente, direccionCliente);
                getIngresoClienteDataManager().limpiarValores();
                infoMessage("Cliente creado correctamente");
            } catch (ClienteException ex) {
                errorMessage(ex.getMessage());
            }
        } else {
            errorMessage(mensajeError);
        }
    }

    /*
     * Medoto que valida si la division geografica y las mascotas se encuentran correctamente anadidas
     */
    private boolean validarDatosParaCreacionCliente() {

        if (Utilitarios.esNulo(getIngresoClienteDataManager().getDivisionGeograficaNivelTres())) {
            mensajeError = "Division Geografica Obligatoria";
            return false;
        }
        return true;
    }
}
